package com.vhall.component.service.livecolumn;

import com.vhall.component.entity.audit.vo.AuditRecordResponseVO;
import com.vhall.component.entity.livecolumn.vo.*;
import com.vhall.component.entity.page.vo.PageVO;

import java.util.List;

/**
 * LiveColumnService-
 * 栏目服务
 *
 * @author xing.wang
 * @date 2023/8/5
 */
public interface LiveColumnService {
    /**
     * 创建栏目
     *
     * @param vo
     * @return
     */
    LiveColumnCreateResponseVO create(LiveColumnCreateRequestVO vo);

    /**
     * 栏目更新
     *
     * @param vo
     * @return
     */
    LiveColumnUpdateResponseVO update(LiveColumnUpdateRequestVO vo);

    /**
     * 删除栏目
     *
     * @param vo
     * @return
     */
    Boolean delete(LiveColumnDeleteRequestVO vo);

    /**
     * 获取栏目信息
     *
     * @param vo
     * @return
     */
    LiveColumnInfoResponseVO getLiveColumn(LiveColumnInfoRequestVO vo);

    LiveColumnInfoResponseVO info(LiveColumnInfoRequestVO vo);

    /**
     * 栏目分页列表接口
     *
     * @param vo
     * @return
     */
    PageVO<LiveColumnBaseResponseVO> pageList(LiveColumnPageListRequestVO vo);

    /**
     * 审核栏目分页列表
     *
     * @param vo
     * @return
     */
    PageVO<LiveColumnAuditListResponseVO> auditPageList(LiveColumnPageListRequestVO vo);

    /**
     * 获取角色下的栏目地址
     *
     * @return
     */
    List<LiveColumnBaseResponseVO> roleAllLiveColumnList();

    /**
     * 订阅栏目
     *
     * @param columnId 栏目ID
     * @return
     */
    Boolean subscribe(Integer columnId);

    /**
     * 取消订阅
     *
     * @param columnId 栏目ID
     * @return
     */
    Boolean unsubscribe(Integer columnId);

    /**
     * 栏目审核
     *
     * @param vo
     * @return
     */
    Boolean auditLiveColumn(AuditLiveColumnRequestVO vo);

    /**
     * 判断栏目是否是被用户订阅
     *
     * @param columnId  栏目ID
     * @param accountId 用户ID
     * @return true or false
     */
    Boolean isSubscribe(Integer columnId, Integer accountId);

    /**
     * 栏目审核记录列表
     *
     * @param vo
     * @return
     */
    List<AuditRecordResponseVO> liveColumnAuditRecordList(LiveColumnAuditRecordListRequestVO vo);

    /**
     * 栏目运营列表
     */
    PageVO<LiveColumnOperListRsponseVO> columnOperationsList(LiveColumnOperListRequestVO vo);

    Boolean adjustingOperLevels(LiveAdjustingOperLevelsVO vo);


    Boolean topColumn(LiveTopOperVO vo);

    Boolean topColumnNum();

    Boolean isSub(Integer columnId);
}
